メインコンテンツまでスキップ

Android SDK

概要

WAS VPS の Android SDK には、Sceneform フラグメントとライフサイクル管理ヘルパーが含まれており、ARCore 対応デバイスで VPS マップ内のローカライズを簡単に実装できます。Immersal と同じ手順で、要件確認・依存関係の追加・マニフェスト設定・サービス起動を行います。

必要条件

  • 最低 Android SDK 24(Android 7.0)
  • ARCore 対応デバイス
  • Kotlin ベースのプロジェクト(サンプルは Kotlin で提供)

APIキーが必要ですか?space.web-ar.studio で取得するか、support@webar3.com / support@web-ar.studio へメールしてください。

SDK を追加

  1. プロジェクトが Maven Central を参照していることを確認します。

    allprojects {
    repositories {
    mavenCentral()
    // 他のリポジトリ…
    }
    }
  2. アプリモジュールの依存関係に追加します。

    dependencies {
    implementation "com.arstudio:wasvps-sdk:1.0.0"
    }
  3. Gradle を同期します。

マニフェスト設定

ARCore の要件を宣言し、必要に応じて最小 SDK を上書きします。

<!-- minSdk < 24 の場合はライブラリを上書き許可 -->
<uses-sdk tools:overrideLibrary="com.arstudio.wasvps_sdk, com.google.ar.sceneform.sceneform, com.google.ar.sceneform.ux" />

<!-- 既定では ARCore 対応端末のみに限定 -->
<uses-feature
android:name="android.hardware.camera.ar"
android:required="true" />

Google Play で対応端末を広げたい場合は android:required="false" にし、tools:replace="android:required" を維持します。

WASVPSArFragment でのクイックスタート

レイアウトに組み込んで簡単に開始できます。

<!-- res/layout/activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/vFragmentContainer"
android:name="com.arstudio.wasvps_sdk.ui.WASVPSArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

supportFragmentManager.beginTransaction()
.replace(R.id.vFragmentContainer, WASVPSArFragment())
.commit()
}
}

Location ID を用意したら、サービスを取得してローカライズを開始します。

val fragment = supportFragmentManager
.findFragmentById(R.id.vFragmentContainer) as WASVPSArFragment

val config = WASVPSConfig.getIndoorConfig(listOf("your-location-id"))
val service = fragment.vpsService

service.setVpsConfig(config)
service.setVpsCallback(object : VpsCallback {
override fun onSuccess() = Unit
override fun onFail() = Unit
override fun onStateChange(state: State) = Unit
override fun onError(error: Throwable) {
Log.e("VPS", "Localization error", error)
}
})

service.startVpsService()

onPause などで一時停止する際は service.stopVpsService() を呼び出してください。

カスタムフラグメントでの統合

独自の ArFragmentArSceneView を使う場合は、WASVPSService を手動で初期化します。

class CustomArFragment : ArFragment() {
private val vpsService = WASVPSService.newInstance()

override fun onAttach(context: Context) {
super.onAttach(context)
WASVPSSdk.init(context.applicationContext)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vpsService.bindArSceneView(arSceneView)
vpsService.setVpsConfig(WASVPSConfig.getOutdoorConfig(listOf("location-id")))
}

override fun onResume() {
super.onResume()
vpsService.resume()
vpsService.startVpsService()
}

override fun onPause() {
vpsService.pause()
vpsService.stopVpsService()
super.onPause()
}

override fun onDestroyView() {
vpsService.destroy()
super.onDestroyView()
}
}

コンテンツの配置

vpsService.worldNode を基準にノードを配置します。ローカライズ成功後は、このノード以下の子が自動的に正しい世界座標に揃います。

val anchorNode = Node().apply {
setParent(vpsService.worldNode)
localPosition = Vector3(0f, 0f, -1f)
}

トラブルシューティング

  • Google Play Services for AR が最新の状態で端末にインストールされているか確認してください。
  • ローカライズが失敗する場合は、API キーや Location ID、サービスへの設定が正しいかを見直してください。
  • リポジトリの /sample モジュールには、権限処理や UI を含むフルフローの例があります。